// 给定一个未排序的整数数组nums，// 找出数字连续的最长序列（不要序列元素在原数组中连续）的长度，并且要用时间复杂度为O(n)的算法解决此问题
// 思路，哈希表
// 数字连续子序列，在原数组中不需要连续，
// 将数组去重并存入哈希表set中，如果当前元素的上一位在set中没有出现过，那么证明这是连续数字的起点，计算连续数字加1在set中是否存在，直到不存在，计算并更新结果

function longestConsecutive(nums) {
    let ans = 0
    let set = new Set(nums)
    for (let i = 0; i < nums.length; i++) {
        // 连续数字的起点
        // 如果set中没有出现，说明是个新的起点，接着判断下一位是否出现过，不是的话，更新len，下一轮循环，
        // 出现的话继续判断
        if (!set.has(nums[i] - 1)) {
            let cur = nums[i]
            let len = 1
            while (set.has(cur + 1)) {
                len++
                cur++
            }
            ans = Math.max(ans, len)
        }        
    }
    return ans
}

let nums = [100,4,200,1,3,2]
console.log(longestConsecutive(nums))
